<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Shine课程表-关于</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/popper.js/1.15.0/popper.min.js" type="module"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
    <!--显示代码-->
    <link href="http://cdn.bootcss.com/highlight.js/8.0/styles/monokai_sublime.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/highlight.js/8.0/highlight.min.js"></script>
    <script >hljs.initHighlightingOnLoad();</script>
    <style type="text/css">
        body{
            background: rgb(229, 253, 229);
            background: linear-gradient(90deg, rgb(230, 254, 229) 0%, rgb(220, 231, 255) 100%);
        }

        .container-fluid{
            margin-top: 50px;
        }

        .introduction-1 .text:first-letter{
            font-size: 2em;
        }
    </style>
</head>
<body>
    <div class="root">
        <div class="top_bar" th:include="top"></div>
        <div class="container-fluid">
            <div class="row" style="margin-top: 75px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <span class="text">
                            Shine课程表项目启动于2019年10月。起初只是一个课表控件的demo。
                            后来Android版本经过四次大版本更新，逐步加入登录辽宁大学教务管理功能、
                            登录超级课程表功能、登录青果教务功能、登录全国强智、正方等通用教务管理和20多所适配学校功能、
                            成绩查询等功能于一体的高校服务软件。在2020年11月，推出Web版，
                            并且同时，Android版第五次大版本更新正在进行，该版本将课表控件独立出来，支持日程插入等更多功能。
                        </span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>

            <div class="row" style="margin-top: 50px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <span class="text">
                            2019年10月，Shine课程表的首个Android版本V0.1开始开发，当时首个版本使用Java开发，没有使用架构。该版本只是实现了基本课表功能。
                        </span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>
            <div class="row">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div>
                        <pre>
                            <code class="java" style="width: 200%">
    //第一个版本的第一行代码
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        StatusBarUtils.with(this).init();

        mWeekView = findViewById(R.id.id_weekview);
        mTimetableView = findViewById(R.id.id_timetableView);
        FloatingActionButton login = findViewById(R.id.tologin);
        final Toolbar toolbar = findViewById(R.id.toolbar);
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        //注意需要找到navigationView才可以找到其中的TextView
        View headView = navigationView.getHeaderView(0);
        user = headView.findViewById(R.id.user);
        score = headView.findViewById(R.id.score);
        backgroundmain = findViewById(R.id.main_background);
        coordinatorLayout = findViewById(R.id.main_coordinator);

        initTimetable(mWeekView,mTimetableView);

        setSupportActionBar(toolbar);
        login.setOnClickListener(this);
        toolbar.setOnClickListener(this);
        /**
         * 侧边菜单点击
         */
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();
        navigationView.setNavigationItemSelectedListener(this);
    }
                            </code>
                        </pre>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>

            <div class="row" style="margin-top: 50px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <span class="text">
                            2019年12月，Shine课程表1.0正式版本发布，该版本主要实现一键登录辽宁大学教务管理获取课表的功能，仍然使用Java编写，仍然没有使用架构。
                        </span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>
            <div class="row">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div>
                        <pre>
                            <code class="java" style="width: 200%">
    //第二个版本中获取cookie实现模拟登录部分代码
    private void getCookie(final String postContent) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection=null;
                BufferedReader reader=null;
                try {
                    HttpURLConnection getcookie = (HttpURLConnection) new URL(LOGIN_URL).openConnection();
                    getcookie.setDoOutput(true);
                    getcookie.setDoInput(true);
                    getcookie.setInstanceFollowRedirects(false);  //防止重定向
                    getcookie.setRequestMethod("POST");
                    getcookie.setReadTimeout(6000);
                    OutputStream postOS = getcookie.getOutputStream();
                    postOS.write(postContent.getBytes());
                    cookie = getcookie.getHeaderField("Set-Cookie");
                    handler.sendEmptyMessage(1);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if(reader!=null){
                        try {
                            reader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (connection!=null){
                        connection.disconnect();
                    }
                }
            }
        }).start();
    }
                            </code>
                        </pre>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>

            <div class="row" style="margin-top: 50px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <span class="text">
                            2020年1月，1.1版本中，开始尝试使用MVC架构来重构Shine课程表（当时名称：辽大+），并且第一次引入架构概念。在该版本，Shine课程表开始正式可以日用。
                        </span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>

            <div class="row" style="margin-top: 50px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <span class="text">
                            2020年2月，1.2版本来临。该版本中，使用MVP架构重构了Shine课程表，并且首次实现了界面和数据间的解耦。并且，该版本开始，使用了SQLite数据库进行课表等数据的存储，并且课程表从该版本开始初现模型。但是该版本并没有进行日用，因为在我了解MVP的同时，
                            发现了MVVM架构并且紧接着进行了MVVM架构的重构。
                        </span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>
            <div class="row" style="margin-top: 20px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <img th:src="@{/images/about_mvp.webp}" class="card-img absolute top-0" alt="">
                        <span class="text-center">Shine课程表-MVP架构版本</span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>

            <div class="row" style="margin-top: 50px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <span class="text">
                            2020年2月，在MVP架构刚刚完成的同时，便开始开始探索MVVM架构版本的Shine课程表，并且在该版本引入Room数据库、ViewModel等大量Google推荐的Jetpack设计规范。
                            不过该版本仍然没有进行日用，因为在此时，我开始探索使用Kotlin版本进行重构Shine课程表--这也是Shine课程表最大的一次转折点。
                        </span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>
            <div class="row" style="margin-top: 20px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <img th:src="@{/images/about_mvvm.webp}" class="card-img absolute top-0" alt="">
                        <span class="text-center">Shine课程表-MVVM架构版本</span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>

            <div class="row" style="margin-top: 50px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <span class="text">
                            2020年3月，Shine课程表Kotlin版本开始进行探索。在初期，因为对Kotlin和MVVM的不熟悉，开发并不顺利，经过了一个多月的努力，一个不完美版本的Shine课程表Kotlin重构版正式上架酷安网、小米应用商店和华为应用商店。
                            并且，该版本也是一直维护到今天、没有进行大版本更新的一个版本，到目前为止，该大版本已经进行小更新70余次，基本功能已经稳定。截至2020年11月，Shine课程表在酷安网下载量已经破万。
                            并且，该项目在开发完成的同时，选择了开源，即使它并不完美，但是我仍然希望，它能够帮助到需要的人：）&nbsp;&nbsp;
                            开源地址：<a href="https://gitee.com/sunshine0523/lnuplus" target="_blank">https://gitee.com/sunshine0523/lnuplus</a>
                        </span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>
            <div class="row" style="margin-top: 20px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <img th:src="@{/images/about_kotlin.webp}" class="card-img absolute top-0" alt="">
                        <span class="text-center">Shine课程表-Kotlin重构版本</span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>

            <div class="row" style="margin-top: 50px">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div class="card card-lift--hover shadow border-0 p-3 m-1">
                        <span class="text">
                            2020年11月，基于SpringBoot架构的Shine课程表Web版上线，该版本和Android界面基本无异，保证了用户的使用习惯。在制作优化完成后，Web版将会同样选择开源。
                       </span>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>
            <div class="row">
                <div class="col-sm-1"></div>
                <div class="col-sm-10 introduction-1">
                    <div>
                        <pre>
                            <code class="java" style="width: 200%">
    @SpringBootApplication
    public class LnuplusWebApplication {

        public static void main(String[] args) {
            SpringApplication.run(LnuplusWebApplication.class, args);
        }

    }

                            </code>
                        </pre>
                    </div>
                </div>
                <div class="col-sm-1"></div>
            </div>

            <div class="row">
                <div class="col-sm-12">
                    <!--页脚-->
                    <div th:include="footer"></div>
                </div>
            </div>
        </div>  <!--container-->
    </div>
</body>
<script type="text/javascript">
    window.onload = function () {
        const navbar = document.getElementsByClassName('navbar')[0];
        const brand = document.getElementsByClassName('navbar-brand')[0];
        const text = document.getElementsByClassName('nav-link');
        const icon = document.getElementsByClassName('navbar-toggler-icon')[0];
        navbar.style.background = 'linear-gradient(90deg, rgb(230, 254, 229) 0%, rgb(220, 231, 255) 100%)';
        brand.style.color = 'rgba(0, 0, 0, 1)';
        for (let i = 0; i<text.length; i++) {
            text[i].style.color = 'rgba(0, 0, 0, 1)';
        }
        icon.style.backgroundImage = 'url("data:image/svg+xml,%3csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3e%3cpath stroke=\'rgba(' + 0 + ',' + 0 + ',' + 0 + ', 1)\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3e%3c/svg%3e")'
    }
</script>
</html>